/**
 * http是基于TCP的。也就是基于传输层协议的。
 nslookup nodejs.org  //通过域名查看IP地址：Address 165.225.133.150

 telnet  165.225.133.150 80//访问IP,(登录IP)

 */

var http=require('http');
//req是读流对象 IncoingMessage
//res是写流对象 ServerResponse
var server=http.createServer();//创建一个服务器，并把实例赋给server对象。触发一个连接事件，连接事件进行函数的回调
var booklist={
    1:{id:1,name:'node'},
    2:{id:2,name:'js'},
    3:{id:3,name:'nodejs'}
};

//给server对象注册事件，监听request时触发的函数
server.on('request',function(req,res){
    //res.write写流
/*  res.setHeader('name','no bye!');
    res.setHeader('age',18);
    res.statusCode=404;*/

    var url=req.url;
    if(url=='/'){ // 1返回所有信息
        var result='';
        for(var attr in booklist){
            result+=(booklist[attr].name)+',';

        }
        res.end(result);
    }else if(url=='/book'){ //book?id=2

        res.end(result);
    }

    //res.end('over');//结束写入。当客户端提交请求过来时，要进行相应。
});
//connection建立连接，和TCP连接类似.socket是TCP的客户端对象，是双工流，即可以往客户端读 也可以往客户端写。
//http是基于TCP的，TCP是底层通讯协议。
//http在TCP基础上，对http的请求和响应进行了封装。
//建立http 的时候也是要通过TCP来进行交互的。
server.on('connection',function(socket){
    socket.on('close',function(){
        console.log('客户端close！');
    });
    socket.on('end',function(){
        console.log('客户端end!');
    });
    console.log('一个新的连接建立了');
});
server.on('close',function(){
    console.log('服务器关闭了！');
});
//建立连接超时时间
/*server.setTimeout(10000,function(){
    console.log('连接已超时！');
});*/

server.on('error',function(err){
    console.log(err);
});


/*
* 浏览器的作用就是代理，当输入网址时，在接到请求指令后浏览器会封装成一个请求对象
* 包括请求头，请求体，请求协议等都会组装好，发给服务器。
* 服务器端进行响应给浏览器，浏览器（作用是代理）进行渲染，
*
* 除了请求网址，还会请求favicon.ico,所以需要对favicon.ico的请求做出处理——response
* 浏览器并发发出请求，一个域名，一个favicon.ico.并且建立两个连接，两个连接分别请求，超时也是两个一起超时的。
*
* */
server.listen(8080);


/*
* 服务器往客户端响应时，Transfer-Encoding:chunk. chunk表示传送的数据包为封装的数据包
* http和TCP、流类似，数据的传输是基于块的。
* */

/*
* statusCode:状态码，表示服务器的响应状态！
* 帮助我们对客户端进行不同情况的处理！
* 1xx  信息响应，接收到请求，并继续处理。  请求被接收了，正在处理，但是还没有处理完
* 2xx  处理成功响应。接收到请求了，并正确的进行响应了。
* 3xx  永久重定向，为了完成响应，要求客户端进一步处理（浏览器在接收到服务器发回的新地址，再发一次请求）。比如301永久重新定义地址，302临时重定向。
* 4xx  客户端错误，客户端语法错误或请求错误。
* 5xx  服务器端错误，服务器不能正常工作错误。（等待服务器环境理顺了）
*
* */


/*
头信息分为：通用的，响应的，请求的
* 客户端提交过来的请求进行分析：
* <scheme>://<user>:<password>@<host>:<port>/</scheme>
* scheme   协议
* user     用户名
* password 密码
* host     服务器IP
* port     端口
* path     路径
* query    查询字符串
* */


/*服务器为客户端响应的信息进行分析
* req.url返回的地址是：http:localhost:8080/
* localhost:8080?name='bye'&age=18   路径当中的键值对通过&符号进行连接。
* 问号？前面的是路径path。   问号？后面的是查询字符串query
* */

/**
 * 今晚8点至10点珠峰node.js课堂在线为你带来了grunt相关内容，介绍了grunt的由来、用途、原理、安装、常用组件和自定义插件的编写。
 请大家做好预习(http://www.gruntjs.net/)，这期问答环节的奖品是小米手环一个。
 */
